<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>一次性取出所有匹</title>
</head>
<body>
<script>
    // 反正就是有点牛，不知道干啥的。


    // 1. 条件：如果一个正则表达式在字符串里面有【多个匹配】，现在一般使用g修饰符或y修饰符，在【循环】里面逐一取出
    var regex = /t(e)(st(\d?))/g;
    var string = 'test1test2test3';

    var matches = [];
    var match;
    while (match = regex.exec(string)) {
      matches.push(match);
    }

    matches // 返回的是一个数组
    // [
    //   ["test1", "e", "st1", "1", index: 0, input: "test1test2test3"],
    //   ["test2", "e", "st2", "2", index: 5, input: "test1test2test3"],
    //   ["test3", "e", "st3", "3", index: 10, input: "test1test2test3"]
    // ]

    // 2. ES6 简化过程：提出String.prototype.matchAll()方法，可以一次性取出：
    const string1 = 'test1test2test3';

      // g 修饰符加不加都可以
    const regex1 = /t(e)(st(\d?))/g;

    for (const match of string1.matchAll(regex1)) {
      console.log(match); // 返回的是遍历器，那就很好，可以使用for of 循环了
    }
    // ["test1", "e", "st1", "1", index: 0, input: "test1test2test3"]
    // ["test2", "e", "st2", "2", index: 5, input: "test1test2test3"]
    // ["test3", "e", "st3", "3", index: 10, input: "test1test2test3"]
    // 想要数组的话，很简单：使用...运算符和Array.from方法就可以了
    // 转为数组方法一
    var arr = [...string.matchAll(regex)]

    // 转为数组方法二
    var arr2 = Array.from(string.matchAll(regex));

    /* 两者对比 */
    // 相对于返回数组，【返回遍历器】的好处在于，如果匹配结果是一个【很大的数组】，那么遍历器比较【节省资源】


</script>
</body>
</html>